From baaef3d9f4bdc81224620ab2f6b92575dcf81a59 Mon Sep 17 00:00:00 2001 From: Ed Sandor <1273949+ewsandor@users.noreply.github.com> Date: Fri, 19 Jun 2020 14:59:27 -0600 Subject: 3041 en us localization (#3060) * Initial locaization from international english to United States English examples: favourite -> favorite optimise -> optimize occured -> occurred labelled -> labelled ok -> okay * More spelling corrections default English occured->occurred cancelled -> canceled labelled -> labeled * Undo key spelling change * i18n format and admin.php translating * Translating admin.php * more admin.php translating * Translating conf.php * Translating feedback.php and format command * Translating gen.php * Translating index.php * Translating sub.php * Translating user.php * Translating install.php * Fix 'there is no idle feed' * FIx 'there is no feed to refresh" * Add i18n manipulation option to ignore all unmodified translation keys * Lint fixes * Update keys newly add since original branch * Revert unintenntional ru 'translation' * Code review revisions * Fix leading whitespace in ignore_unmodified api * Update app/i18n/en-us/gen.php Co-authored-by: Frans de Jonge * Update app/i18n/en-us/admin.php Co-authored-by: Frans de Jonge * Update app/i18n/en-us/admin.php Co-authored-by: Frans de Jonge * Update error message for Make ignore-unmodified keys to use Make syntax. (inline with 3062) Also rename ignore-unmodifed-key -> ignore-unmodified-keys * Replace makefile leading spaces with tabs * Code review revisions * Retab added php functions * Missed tab replace * Remove stray '-> todo' Co-authored-by: root Co-authored-by: Frans de Jonge --- Makefile | 8 + app/i18n/cz/gen.php | 1 + app/i18n/de/gen.php | 1 + app/i18n/en-us/admin.php | 210 +++++++++++++ app/i18n/en-us/conf.php | 202 ++++++++++++ app/i18n/en-us/feedback.php | 134 ++++++++ app/i18n/en-us/gen.php | 215 +++++++++++++ app/i18n/en-us/index.php | 66 ++++ app/i18n/en-us/install.php | 123 ++++++++ app/i18n/en-us/sub.php | 120 +++++++ app/i18n/en-us/user.php | 44 +++ app/i18n/en/feedback.php | 4 +- app/i18n/en/gen.php | 1 + app/i18n/es/gen.php | 1 + app/i18n/fr/gen.php | 1 + app/i18n/he/gen.php | 1 + app/i18n/it/gen.php | 1 + app/i18n/kr/gen.php | 1 + app/i18n/nl/gen.php | 1 + app/i18n/oc/gen.php | 1 + app/i18n/pt-br/gen.php | 1 + app/i18n/ru/feedback.php | 4 +- app/i18n/ru/gen.php | 1 + app/i18n/sk/gen.php | 1 + app/i18n/tr/gen.php | 1 + app/i18n/zh-cn/gen.php | 1 + cli/i18n/I18nData.php | 19 ++ cli/i18n/ignore/cz.php | 1 + cli/i18n/ignore/de.php | 1 + cli/i18n/ignore/en-us.php | 686 +++++++++++++++++++++++++++++++++++++++++ cli/i18n/ignore/es.php | 1 + cli/i18n/ignore/fr.php | 1 + cli/i18n/ignore/he.php | 5 + cli/i18n/ignore/it.php | 1 + cli/i18n/ignore/kr.php | 1 + cli/i18n/ignore/nl.php | 1 + cli/i18n/ignore/oc.php | 1 + cli/i18n/ignore/pt-br.php | 1 + cli/i18n/ignore/ru.php | 1 + cli/i18n/ignore/sk.php | 1 + cli/i18n/ignore/tr.php | 1 + cli/i18n/ignore/zh-cn.php | 1 + cli/manipulate.translation.php | 17 +- 43 files changed, 1880 insertions(+), 5 deletions(-) create mode 100644 app/i18n/en-us/admin.php create mode 100644 app/i18n/en-us/conf.php create mode 100644 app/i18n/en-us/feedback.php create mode 100644 app/i18n/en-us/gen.php create mode 100644 app/i18n/en-us/index.php create mode 100644 app/i18n/en-us/install.php create mode 100644 app/i18n/en-us/sub.php create mode 100644 app/i18n/en-us/user.php create mode 100644 cli/i18n/ignore/en-us.php create mode 100644 cli/i18n/ignore/he.php diff --git a/Makefile b/Makefile index fd5eccfdd..d19d40fa6 100644 --- a/Makefile +++ b/Makefile @@ -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 @@ + 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 API access (required for mobile apps)', + '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 ./data/cache 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 ./data 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 ./data/favicons 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 ./data/tokens directory. HTTP server must have write permission', + 'ok' => 'Permissions on the tokens directory are good.', + ), + 'users' => array( + 'nok' => 'Check permissions on ./data/users 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
(for the Web-form login method)', + '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 @@ + 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
(e.g., for mobile apps)', + 'password_form' => 'Password
(for the Web-form login method)', + '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 ⇧ Shift modifier, navigation shortcuts apply on feeds.
With the Alt ⎇ 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' => '+ Alt ⎇ to mark previous articles as read
+ ⇧ Shift 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 @@ + 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. Check FreshRSS logs for details.', + 'ok' => '%s is now disabled', + ), + 'enable' => array( + 'ko' => '%s cannot be enabled. Check FreshRSS logs 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' => '%s has been updated', + 'actualizeds' => 'RSS feeds have been updated', + 'added' => 'RSS feed %s has been added', + 'already_subscribed' => 'You have already subscribed to %s', + 'cache_cleared' => '%s cache has been cleared', + 'deleted' => 'Feed has been deleted', + 'error' => 'Feed cannot be updated', + 'internal_problem' => 'The newsfeed could not be added. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', + 'invalid_url' => 'URL %s 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' => '%s could not be added', + 'not_found' => 'Feed cannot be found', + 'over_max' => 'You have reached your limit of feeds (%d)', + 'reloaded' => '%s 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 version %s.', + 'error' => 'The update process has encountered an error: %s', + 'file_is_nok' => 'New version %s available, but check permissions on %s 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 @@ + 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 Terms of Service.', + 'email' => 'Email address', + 'keep_logged_in' => 'Keep me logged in (%s days)', + 'login' => 'Login', + 'logout' => 'Logout', + 'password' => array( + '_' => 'Password', + 'format' => 'At least 7 characters', + ), + 'registration' => array( + '_' => 'New account', + 'ask' => 'Create an account?', + 'title' => 'Account creation', + ), + 'reset' => 'Authentication reset', + 'username' => array( + '_' => 'Username', + 'admin' => 'Administrator username', + 'format' => 'Maximum 16 alphanumeric characters', + ), + ), + '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 @@ + array( + '_' => 'About', + 'agpl3' => 'AGPL 3', + 'bugs_reports' => 'Bug reports', + 'credits' => 'Credits', + 'credits_content' => 'Some design elements come from Bootstrap although FreshRSS doesn’t use this framework. Icons come from GNOME project. Open Sans font police has been created by Steve Matteson. FreshRSS is based on Minz, a PHP framework.', + 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like Kriss Feed or Leed. It is light and easy to take in hand while being powerful and configurable tool.', + 'github' => 'on Github', + 'license' => 'License', + 'project_website' => 'Project website', + 'title' => 'About', + 'version' => 'Version', + 'website' => 'Website', + ), + 'feed' => array( + 'add' => '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 @@ + 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
(for the Web-form login method)', + '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 ./data/cache 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 ./data 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 ./data/favicons 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 ./data/users 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 (maximum 16 alphanumeric characters)', + '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 %s 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 @@ + 'Feed and category creation has been moved here. 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 %s.', + '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 here 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
(OPML, JSON or ZIP)', + 'file_to_import_no_zip' => 'File to import
(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 @@ + 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 on the profile page.', + 'email_sent_to' => 'We sent you an email at %s, 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 @@ +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); -- cgit v1.2.3